/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufsc.aps.jogodavida.model;

import com.thoughtworks.xstream.XStream;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Daniel
 */
public class Baralho implements Serializable {

    private List<Carta> cartasProfissao;
    private List<Carta> cartasAcaoSustentavel;
    private List<Carta> cartasCotidiano;
    private List<Carta> cartasAtividades;

    public Baralho() {
        initBaralho("baralhoProfissao.xml", "PROFISSAO");
        initBaralho("baralhoSustentavel.xml", "SUSTENTAVEL");
        initBaralho("baralhoFamilia.xml", "COTIDIANO");
        initBaralho("baralhoLazer.xml", "LAZER");
    }

    public List<Carta> getCartasProfissao() {
        return cartasProfissao;
    }

    public void setCartasProfissao(List<Carta> cartasProfissao) {
        this.cartasProfissao = cartasProfissao;
    }

    public List<Carta> getCartasAcaoSustentavel() {
        return cartasAcaoSustentavel;
    }

    public void setCartasAcaoSustentavel(List<Carta> cartasAcaoSustentavel) {
        this.cartasAcaoSustentavel = cartasAcaoSustentavel;
    }

    public List<Carta> getCartasCotidiano() {
        return cartasCotidiano;
    }

    public void setCartasCotidiano(List<Carta> cartasCotidiano) {
        this.cartasCotidiano = cartasCotidiano;
    }

    public List<Carta> getCartasAtividades() {
        return cartasAtividades;
    }

    public void setCartasAtividades(List<Carta> cartasAtividades) {
        this.cartasAtividades = cartasAtividades;
    }

    private void initBaralho(String arquivo, String tipoBaralho) {
        try {
            File f = new File(System.getProperty("user.dir") + "/resources/" + arquivo);//endereço do arquivo XML
            FileReader freader = new FileReader(f);
            BufferedReader br = new BufferedReader(freader);
            StringBuilder sb = new StringBuilder();
            String textLine = "";
            while (textLine != null) {    // ler todo arquivo XML            
                sb.append(textLine);
                textLine = br.readLine();
            }
            XStream xs = new XStream();

            if (tipoBaralho.trim().equals("PROFISSAO")) {
                cartasProfissao = (List<Carta>) xs.fromXML(sb.toString());//Convertendo o XML em Objeto
            }
            if (tipoBaralho.trim().equals("LAZER")) {
                cartasAtividades = (List<Carta>) xs.fromXML(sb.toString());
            }
            if (tipoBaralho.trim().equals("COTIDIANO")) {
                cartasCotidiano = (List<Carta>) xs.fromXML(sb.toString());
            }
            if (tipoBaralho.trim().equals("SUSTENTAVEL")) {
                cartasAcaoSustentavel = (List<Carta>) xs.fromXML(sb.toString());
            }

            br.close();
            freader.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Baralho.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Baralho.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
    
    public List<Carta> sortearCartasInicio() {
        List<Carta> aux = new ArrayList<Carta>();
        for(int i = 0 ; i < 5 ; i++) {
            int random = (int)(Math.random() * 4);
            if(random == 0) {
                aux.add(comprarProfissao());
            }
            else if(random == 1) {
                aux.add(comprarLazer());
            }
            else if(random == 2) {
                aux.add(comprarCotidiano());
            }
            else {
                aux.add(comprarSustentavel());
            }
        }
        return aux;
    }

    public Carta comprarProfissao() {
        return cartasProfissao.remove((int) (Math.random() * cartasProfissao.size()));
    }

    public Carta comprarLazer() {
        return cartasAtividades.remove((int) (Math.random() * cartasAtividades.size()));
    }

    public Carta comprarSustentavel() {
        return cartasAcaoSustentavel.remove((int) (Math.random() * cartasAcaoSustentavel.size()));
    }

    public Carta comprarCotidiano() {
        return cartasCotidiano.remove((int) (Math.random() * cartasCotidiano.size()));
    }
}
